package com.cskaoyan.javase.oop2._1extends._2advantage;

/**
 * @description: 继承的优缺点
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * > 练习
 * - 在一款游戏中，我们有很三种类型的鸭子，这些鸭子都有共同属性，都可以叫（cry），都可以游泳（swim）
 * - 应该怎么编写这些鸭子类？
 * - 需求更改了，这些鸭子不能游泳了，但是都会飞（fly）
 * - 最后我添加了一种鸭子，第四种鸭子，这个鸭子不会飞
 *
 * 继承的优点:
 *      复用代码, 可以更好的应对需求变更,提升程序的可维护性和扩展性
 *
 * 继承的缺点:
 *      子类继承父类必须无条件接收父类的所有成员
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        FirstTypeDuck ftd = new FirstTypeDuck();
        //ftd.swim();
        ftd.fly();

        FourthTypeDuck fourthTD = new FourthTypeDuck();
        fourthTD.fly();

    }
}

//定义鸭子的父类
class Duck {
    String name;
    public void cry() {
        System.out.println("嘎嘎嘎!");
    }
    /*public void swim() {
        System.out.println("白毛浮绿水,红掌拨清波");
    }*/
    public void fly() {
        System.out.println("i can fly");
    }
}

class FirstTypeDuck extends Duck {
    //自由扩展父类
}

class SecondTypeDuck extends Duck {
    //自由扩展父类
}

class ThirdTypeDuck extends Duck {
    //自由扩展父类
}
class FourthTypeDuck extends Duck{
    //子类继承父类方法时,可以更改方法的实现,称之为"方法覆盖"/"方法重写"
    @Override
    public void fly() {
        System.out.println("i can not fly");
    }
}